import { PortalErrorType } from '@shadom/portal';
import { dataBouncing, accountDisabled, notLogin, serverError, otherLogins, success, unknownError, systemRefused} from './error-code-handlers';

const MESSAGE_DEFAULT = {
    success: '操作成功！',
    error: '操作失败！',
    serverError: '似乎出了什么状况，正在恢复中...'
};


/**
 * 它将错误对象格式化为人类可读的字符串
 * @param [err] - 返回的错误对象。
 * @returns 返回字符串的函数。
 */
function fmtPortalMessage(err = {}) {
    console.log('portalError===', err);
    let errorTip = '';
    switch (err.type) {
        case PortalErrorType.PORTAL_NOT_FOUND:
            errorTip =  '接口未定义';
        break;
        case PortalErrorType.PAYLOAD_VERIFY_FAIL:
            errorTip = '接口校验未通过';
        break;
        case PortalErrorType.PTE_COOLING_DOWN:
            errorTip =  '操作太频繁了，请稍后';
        break;
        case PortalErrorType.PTE_DUP_REQUEST:
            errorTip = '操作太频繁了，请稍后';
        break;
        default:
            errorTip = '服务开小差了～';
        break;
    }
    G_dispatchEvent('toast', { message: errorTip, type: 'error' });
}

/**
 * 提交全局Message，在App.vue中有注册监听
 * @param {import('.').normalPortalResponse} res 
 * @param {payloadDataSet & PortalMessageOptions} payload 
 * @returns 
 */
 export function handleResponseStatus(res, payload) {
	const { status} = res;
	const { silence, successText, errorText } = payload;
	let txt = '';
	let /** @type {msgEvent['toast']['type']} */type = 'success';

	// 关掉全局 message，不弹出全局message提示
	if(silence) {
		return;
	}

	if (status?.code === 200) {
		txt = successText || status.desc || MESSAGE_DEFAULT.success;
	} else {
		type = status.code === -1 ? 'info' : 'error';
		txt = errorText || status.desc || MESSAGE_DEFAULT.error;
	}

	const responseHandler = ResponseHandlers[status.code];
    if(!responseHandler) { // default
        // G_dispatchEvent('toast', { message: txt, type });
        return;
    }
    responseHandler(res, payload);
}


/**
 * @type {Record<number, import('./error-code-handlers').ResponseHandler>}
 */
const ResponseHandlers = {
    1: dataBouncing,
    200: success,
    100000: otherLogins, // 账号互顶
    20100001: notLogin, // 账号失效
	30020017: accountDisabled, //  账号被禁用
    30020022: systemRefused, // 非白名单问题
    40000002: serverError,
};

export {
	MESSAGE_DEFAULT,
    fmtPortalMessage
};
